#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>

// void* thread_run(void* args)
// {
//   while(1)
//   {
//     printf("我是[%s]线程，线程id:%lu\n", (char*)args, pthread_self());
//     sleep(1);
//   }
// }

// int main()
// {
//   pthread_t tid;
//   pthread_create(&tid, NULL, thread_run, "new thread");
//   while(1)
//   {
//     printf("我是main线程，线程id：%lu\n", pthread_self());
//     sleep(1);
//   }

//   return 0;
// }

//void* thread_run(void* args)
//{
//  pthread_detach(pthread_self());//将新线程分离
//  while(1)
//  {
//    printf("我是新线程[%s], 我创建的ID是%lu\n", (char*)args, pthread_self());
//    sleep(2);
//    break;
//
//  }
//}
//
//int main()
//{
//  pthread_t tid;
//  pthread_create(&tid, NULL, thread_run, (void*)"new thread");
//  
//  printf("我是主线程，线程id:%lu\n", pthread_self());
//  sleep(1);
//  int ret = 0;
//  void* status = NULL;
//  
//  ret = pthread_join(tid, &status);//等待新线程，成功返回0
//  printf("ret:%d status:%d\n", ret, (int)status);
//  sleep(2);
//
//}


//pthread_t g_tid;//定义一个全局的tid
//
//void* thread_run(void* args)
//{
//  while(1)
//  {
//    printf("我是新线程[%s], 我创建的ID是%lu\n", (char*)args, pthread_self());
//    sleep(2);
//    pthread_cancel(g_tid);
//  }
//}
//
//int main()
//{
//  g_tid = pthread_self();//获取main 线程的tid
//  pthread_t tid;
//  pthread_create(&tid, NULL, thread_run, (void*)"new thread");
//  while(1)
//  {
//    printf("我是主线程，线程id:%lu\n", pthread_self());
//    sleep(1);
//  }
//}

//void* thread_run(void* args)
//{
//  while(1)
//  {
//    printf("我是新线程[%s], 我创建的ID是%lu\n", (char*)args, pthread_self());
//    sleep(1);
//  }
//}
//
//int main()
//{
//
//  pthread_t tid;
//  pthread_create(&tid, NULL, thread_run, (void*)"new thread");
//  
//  printf("cancel new thread begin1\n");
//  pthread_cancel(tid);//取消新线程
//  printf("cancel new thread end\n");
//  void* status = NULL;
//  pthread_join(tid, &status);  //等待线程,拿到线程的返回状态
//  printf("ret:%d\n", (int)status);
//  return 0;
//}

// void* thread_run(void* args)
// {
//  while(1)
//  {
//    printf("我是新线程[%s], 我创建的ID是%lu\n", (char*)args, pthread_self());
//    sleep(5);
//    break;
//  }
//  //pthread_exit((void*)123);
//  exit(123);//终止整个进程
// }

// int main()
// {

//  pthread_t tid;
//  pthread_create(&tid, NULL, thread_run, (void*)"new thread");
 
//  void* status = NULL;
//  pthread_join(tid, &status);  //等待线程,拿到线程的返回状态
//  printf("ret:%d\n", (int)status);
//  return 0;
// }

void* thread_run(void* args)
{
 while(1)
 {
  // printf("我是新线程[%s], 我创建的ID是%lu\n", (char*)args, pthread_self());
   sleep(1);
 }
}

int main()
{

 pthread_t tid[5];//一次创建多个线程
 for(int i = 0; i < 5; ++i)
 {
   pthread_create(tid+i, NULL, thread_run, (void*)"new thread");
 }
 
 while(1)
 {
   printf("我是主线程, 我的线程ID是： %lu\n", pthread_self());//pthread_self()，查看线程ID
   printf("###############################\n");
   for(int i = 0; i < 5; ++i)
   {
     printf("我是新线程[%d], 我创建的ID是%lu\n", i, tid[i]);
   }
   printf("###############################\n");
   sleep(1);
 }

 return 0;
}

//void* thread_run(void* args)
//{
//  while(1)
//  {
//    printf("我是新线程[%s], 我创建的ID是%lu\n", (char*)args, pthread_self());
//    sleep(1);
//  }
//}
//
//int main()
//{
//
//  pthread_t tid;
//  pthread_create(&tid, NULL, thread_run, (void*)"new thread");
//  
//  while(1)
//  {
//    printf("我是主线程, 我的线程ID是： %lu\n", pthread_self());//pthread_self()，查看线程ID
//    sleep(1);
//  }
//
//  return 0;
//}
